<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=
    , initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //         maxBy，根据给定条件找到最大的数组项
        // 更多描述 类似 loadash 如：

        const data = [{ value: 6 }, { value: 2 }, { value: 4 }];

        //             //=> { value: 6 }
        //             maxBy(data, (x) => x.value);
        //             面试追问:

        //             如果最大的项有多个，则多个都返回，如下所示

        // const data = [{ value: 6 }, { value: 2 }, { value: 4 }, { value: 6 }];

        // //=> [{ value: 6 }, { value: 6 }]
        console.log(maxBy(data, (x) => x.value))

        function maxBy(data, keyBy) {
            return data.slice(1).reduce((x, y) => {
                if (keyBy(x[0]) === keyBy(y)) {
                    return [...x, y]
                }
                else return keyBy(x[0]) > keyBy(y) ? x : [y]
            }, [data[0]])
        }
    </script>
</body>

</html>